package cn.org.xuanzp.examples.v1;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.ReferenceCountUtil;

/**
 * 
 * @author hy
 * @createTime 2021-04-17 10:12:40
 * @description 创建自己的服务处理器
 *
 */
public class NettyFtpClientHandler extends ChannelInboundHandlerAdapter { // (1)

	// 每次有数据的时候会被调用
	@Override
	public void channelRead(ChannelHandlerContext ctx, Object msg) { // (2)
		System.out.println("NettyClientHandler:调用当前的channelRead方法！");

		try {
			System.out.println("开始读取服务器发送的数据！");

		} finally {
			ReferenceCountUtil.release(msg);// (3)这里必须要释放
		}
	}

	// 第一次连接上服务器的时候被调用
	@Override
	public void channelActive(final ChannelHandlerContext ctx) {
		System.out.println("NettyClientHandler:调用当前的channelActive方法！");
	}

	// 出现异常的时候，直接关闭这个连接
	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { // (4)
		System.out.println("NettyClientHandler:调用当前的exceptionCaught方法！");
		// Close the connection when an exception is raised.
		cause.printStackTrace();
		ctx.close();
	}
}